﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace Administracja
{
    public partial class Osoby : UserControl
    {
        private int _id;
        private int _index;
        private readonly List<int> _idOsob = new List<int>();

        public Osoby()
        {
            InitializeComponent();
            Wyswietl();
        }

        private void Wyswietl()
        {
            int topItemIndex = 0;

            try
            {
                topItemIndex = lista.TopItem.Index;
            }
            catch { }

            lista.Items.Clear();
            _idOsob.Clear();

            var reader2D = Baza.Wczytaj2D("SELECT * FROM OSOBY WHERE NAZWISKO LIKE '" + szukaj.Text + "%' order by grupa, nazwisko, imie");

            foreach (var reader1D in reader2D)
            {
                int idO = int.Parse(reader1D[0]);
                _idOsob.Add(idO);
                ListViewItem element = lista.Items.Add(reader1D[1]);
                element.SubItems.Add(reader1D[2]);
                element.SubItems.Add(reader1D[3]);
                element.SubItems.Add(reader1D[4]);
                element.SubItems.Add(reader1D[5]);
                element.SubItems.Add(reader1D[6]);
                element.SubItems.Add(reader1D[8]);
                element.SubItems.Add(reader1D[12]);

                double bilans = Baza.LiczBilansOsob(idO);
                element.SubItems.Add(String.Format("{0:N2}", bilans));
                if (bilans < 0)
                {
                    element.BackColor = Color.Orange;
                }
                else
                {
                    if (bilans > 0)
                    {
                        element.BackColor = Color.GreenYellow;
                    }
                }
            }

            for (int i = 0; i < _idOsob.Count; i++)
            {
                var reader = Baza.Wczytaj("SELECT DATA FROM FAKTURY WHERE ID IN (SELECT MAX(ID) FROM FAKTURY WHERE ID_N = '" + _idOsob[i] + "')");

                lista.Items[i].SubItems.Add(reader.Substring(5, 2));
            }

            try
            {
                lista.Items[_index].Selected = true;
                lista.TopItem = lista.Items[topItemIndex];
                _id = _idOsob[_index];
            }
            catch { }
        }

        private void UsunClick(object sender, EventArgs e)
        {
            var reader1D = Baza.Wczytaj1D("SELECT Nazwisko, Imie FROM OSOBY WHERE ID = '" + _id + "'");

            string nazwa = reader1D[0] + " " + reader1D[1];

            if (Wyjatki.Komunikat("Czy na pewno chcesz usunąć " + nazwa + " ?", "Usunąć?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                int liczbaFaktur = int.Parse(Baza.Wczytaj("SELECT Count(*) FROM FAKTURY WHERE ID_N ='" + _id + "'"));

                if (liczbaFaktur > 1)
                {
                    Wyjatki.Komunikat(nazwa + " posiada faktury, najpierw musisz je usunąć!", "Usuń faktury!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                else
                {
                    Baza.Zapisz("DELETE FROM FAKTURY_SKLADNIKI WHERE ID_F IN (SELECT ID FROM FAKTURY WHERE ID_N ='" + _id + "')",
                        "DELETE FROM WPLATY WHERE ID_F IN (SELECT ID FROM FAKTURY WHERE ID_N ='" + _id + "')",
                        "DELETE FROM FAKTURY WHERE ID_N = '" + _id + "'",
                        "DELETE FROM OSOBY WHERE ID = '" + _id + "'");
                }
            }
            Wyswietl();
        }

        private void DodajClick(object sender, EventArgs e)
        {
            DateTime data = DateTime.Today.AddMonths(-1);

            _id = Baza.Ustaw("Osoby");
            Baza.Ustaw("Faktury");

            Baza.Zapisz("INSERT INTO OSOBY VALUES (GEN_ID(NUMERACJA_OSOBY,1),'','','','','','','','','','','','','','" + DateTime.Now.ToString("yyyy.MM.dd") + "','')",
                "INSERT INTO FAKTURY VALUES(GEN_ID(NUMERACJA_FAKTURY,1),'0','" + data.Year + "." + data.Month + "." + data.Day + "',GEN_ID(NUMERACJA_OSOBY,0),'0','0','0','0')");

            new OsobyEdycja(_id, true).ShowDialog();
            Wyswietl();
        }

        private void EdycjaClick(object sender, EventArgs e)
        {
            new OsobyEdycja(_id, false).ShowDialog();
            Wyswietl();
        }

        private void WplatyClick(object sender, EventArgs e)
        {
            var z = new OsobyWplaty(_id) { MdiParent = ParentWindow.ParentStatic };
            z.FormClosed += FormClosed;
            z.Show();
        }

        private void SzukajTextChanged(object sender, EventArgs e)
        {
            int poz = szukaj.SelectionStart;
            try
            {
                szukaj.Text = szukaj.Text.Substring(0, 1).ToUpper() + szukaj.Text.Substring(1);
            }
            catch { }
            szukaj.SelectionStart = poz;
            Wyswietl();
        }

        private void ListaSelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                _index = lista.SelectedItems[0].Index;
            }
            catch
            {
                _index = 0;
            }

            _id = _idOsob[_index];
        }

        private void FormClosed(object sender, FormClosedEventArgs e)
        {
            Wyswietl();
        }
    }
}
